// ds3231.h
#ifndef DS3231_H
#define DS3231_H

#include "driver/i2c.h"
#include "esp_err.h"

// DS3231 I2C地址
#define DS3231_ADDR                 0x68

// DS3231寄存器地址
#define DS3231_TIME_REG             0x00    // 时间/日期寄存器起始地址
#define DS3231_ALARM1_REG           0x07    // 闹钟1寄存器起始地址
#define DS3231_ALARM2_REG           0x0B    // 闹钟2寄存器起始地址
#define DS3231_CONTROL_REG          0x0E    // 控制寄存器
#define DS3231_STATUS_REG           0x0F    // 状态寄存器
#define DS3231_AGING_OFFSET_REG     0x10    // 老化补偿寄存器
#define DS3231_TEMP_REG             0x11    // 温度寄存器（高字节）

// 时间结构体
typedef struct {
    uint8_t seconds;      // 秒 (0-59)
    uint8_t minutes;      // 分 (0-59)
    uint8_t hours;        // 时 (0-23)
    bool is_pm;           // AM/PM标志（仅在12小时制下有效）

    uint8_t day;          // 星期 (1-7)
    uint8_t date;         // 日期 (1-31)
    uint8_t month;        // 月份 (1-12)
    uint8_t year;         // 年份 (0-99，代表2000-2099)
} ds3231_time_t;

// 函数声明
esp_err_t ds3231_init(void);
esp_err_t ds3231_get_time(ds3231_time_t *time);
esp_err_t ds3231_set_time(ds3231_time_t *time);
esp_err_t ds3231_get_temperature(float *temp);
#include <time.h>

// 时间戳转RTC格式
esp_err_t ds3231_set_time_from_timestamp(time_t timestamp);

// RTC格式转时间戳
esp_err_t ds3231_get_timestamp(time_t *timestamp);
#endif // DS3231_H